import numpy as np
import pandas as pd


def power_law(x, a, b):
    return a * np.power(x, b)


def calculate_r_squared(x, y, a, b):
    # 计算预测值
    y_pred = power_law(x, a, b)
    # 计算均值
    y_mean = np.mean(y)
    # 计算总离差平方和
    sst = np.sum((y - y_mean) ** 2)
    # 计算残差平方和
    sse = np.sum((y - y_pred) ** 2)
    # 计算 R² 值
    r_squared = 1 - (sse / sst)
    return r_squared


# 替换为你幂函数中的参数
a = 1.0  # 示例参数 a
b = 0.5  # 示例参数 b

# 从 Excel 中读取数据
df = pd.read_excel('data.xlsx', sheet_name=0)  # sheet_name=0 表示第一个工作表
new_x = df.iloc[:, 0].values  # 第一列作为 x
new_y = df.iloc[:, 1].values  # 第二列作为 y

# 计算 R² 值
r_squared = calculate_r_squared(new_x, new_y, a, b)
print("R² 值为:", r_squared)
